package com.genericity.demo01;

import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        System.out.println("泛型学习！");
        /**
         * 为什么需要泛型？
         * 程序员构建一个类型为Object集合，该集合能够存储任意的数据类型对象，而在使用
         * 该集合的过程中，需要程序员明确知道存储每个元素的数据类型，否则很容易引发错误
         * ClassCastException 异常
         */
        // 非泛型集合 -- 可以添加任何值进入集合
        ArrayList list = new ArrayList<>();
        // list.add(object o) object 表示可以添加任何类型
        list.add("kerry");
        //list.add(100);
        //list.add(true);
        for (int i = 0; i < list.size(); i++) {
            // 需要强制转换为 字符串类型
            String str = (String) list.get(i);
            /**
             * 但当值为 100 时，java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
             * 类型转换失败
             */
        }

        // 定义一个泛型集合 -- 字符串的泛型
        ArrayList<String> strList = new ArrayList<>();
        // 只能添加字符串类型的集合
        strList.add("a");
        strList.add("b");
        strList.add("c");

        for (int i = 0; i < strList.size(); i++) {
            String s = strList.get(i);
            System.out.println(s);
        }

        // 定义一个整数泛型集合
        ArrayList<Integer> intList = new ArrayList<>();
        intList.add(100);
        intList.add(200);
        intList.add(300);

        for (int i = 0; i < intList.size(); i++) {
            Integer integer = intList.get(i);
            System.out.println(integer);
        }
    }
}
